/*
 * ATM Example system - file Inquiry.java   
 *
 * copyright (c) 2001 - Russell C. Bjork
 *
 */
 
package atm.transaction;
import atm.ATM;
import atm.Session;
import atm.physical.*;
import banking.AccountInformation;
import banking.Card;
import banking.Message;
import banking.Money;
import banking.Status;
import banking.Receipt;

/** Representation for a balance inquiry transaction
 */
public class Inquiry extends Transaction
{
    /** Constructor
     *
     *  @param atm the ATM used to communicate with customer
     *  @param session the session in which the transaction is being performed
     *  @param card the customer's card
     *  @param pin the PIN entered by the customer
     */
    public Inquiry(ATM atm, Session session, Card card, int pin)
    {
        super(atm, session, card, pin);
    }
    
    /** Get specifics for the transaction from the customer
     *
     *  @return message to bank for initiating this transaction
     *  @exception CustomerConsole.Cancelled if customer cancelled this transaction
     */
    protected Message getSpecificsFromCustomer() throws CustomerConsole.Cancelled
    {
        from = atm.getCustomerConsole().readMenuChoice(
            "Account to inquire from",
            AccountInformation.ACCOUNT_NAMES);
        
        // Team 1 Defect # 5: Swap message type declaration on Inquiry and Withdrawal.
        return new Message(Message.WITHDRAWAL, 
                        card, pin, serialNumber, from, -1, new Money(0));
    }
    
    /** Complete an approved transaction
     *
     *  @return receipt to be printed for this transaction
     */
    protected Receipt completeTransaction()
    {
        return new Receipt(this.atm, this.card, this, this.balances) {
            {
                detailsPortion = new String[2];
                detailsPortion[0] = "INQUIRY FROM: " + 
                                    AccountInformation.ACCOUNT_ABBREVIATIONS[from];
                detailsPortion[1] = "";
            }
        };
    }
    
    /** Account to inquire about
     */
    private int from;
    
}